package cn.suchan.jianzhi.q45_sequence;

/**
 * 知识点：扑克牌顺子
 * 题目描述
 * LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...
 * 他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,
 * 如果抽到的话,他决定去买体育彩票,嘿嘿！！
 * “红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....
 * LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。
 * 上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。
 * <p>
 * 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何，
 * 如果牌能组成顺子就输出true，否则就输出false。为了方便起见,你可以认为大小王是0。
 * </p>
 *
 * @author suchan
 * @date 2019/06/07
 */
public class Solution {

    /**
     * 先对数组进行排序，然后比较非0的数字之间。
     * 如果相差一个数字，就将0的个数减1；如果相差两个数字，就将0的个数减2；以此类推。
     * （2-1=1表示2和1之间没有相隔数字，3-1=2表示3和1之间相隔了一个数字。
     * 使用x-y-1表示x和y之间相隔的数字个数，其中x>y）
     * 最后判断如果0的个数为负数，则表明不能组成顺子，否则可以。
     *
     * @param numbers
     * @return
     */
    public boolean isContinuous(int[] numbers) {
        if (numbers.length <= 0) {
            return false;
        }

        int kingCount = 0;

        // 先对数组进行排序
        for (int i = 0; i < numbers.length - 1; i++) {
            for (int j = i + 1; j < numbers.length; j++) {
                if (numbers[i] > numbers[j]) {
                    int temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }

        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == 0) {
                // 统计0的个数
                kingCount++;
            } else if (i != numbers.length - 1) {
                if (numbers[i] != numbers[i + 1]) {
                    // numbers[i + 1]和 numbers[i]之间相差多少个数字，kingCount就减多少
                    int diff = numbers[i + 1] - numbers[i] - 1;
                    kingCount = kingCount - diff;
                } else {
                    // 数组中不能出现除0以外重复出现的数字，如果有重复的数字，则直接返回false
                    return false;
                }
            }
        }

        if (kingCount >= 0) {
            return true;
        }

        return false;
    }

    public static void main(String[] args) {
        int[] arr = {0, 1, 5, 4};
        Solution solution = new Solution();
        System.out.println(solution.isContinuous(arr));
    }
}
